﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Data.OleDb;
using Disk_Pizza_Admin.sql;


namespace Disk_Pizza_Admin
{
    public partial class frmCliente : Form
    {
        OleDbConnection conexao;
        OleDbDataAdapter adapter;
        DataSet ds;
        OleDbCommand comando;
        string tipoOperacao = "n"; //tipoOperacao será usado para indicar que operação o Botão OK irá efetuar. n = nenhuma, i = inserir , a = alterar
        int codigo_c = 0;

        public frmCliente()
        {
            InitializeComponent();
        }

        frmVenda instanciaFrmVenda;
        int pdv = 0;

        public frmCliente(frmVenda frm, string operacao)
        {
            InitializeComponent();
            tipoOperacao = operacao;
            instanciaFrmVenda = frm;
            pdv = 1;
            if (operacao.Equals("i"))
            {
                txtTelefone.Text = instanciaFrmVenda.txtTelefone.Text;
            }
            else
            {
                codigo_c = Convert.ToInt32(instanciaFrmVenda.lblCodigoCliente.Text);
                preencheCamposClientes(instanciaFrmVenda.lblCodigoCliente.Text);
            }
        }


        private void TextBox_Leave(object sender, EventArgs e)
        {
            txtNome.Text = txtNome.Text.ToUpper();
            txtEndereco.Text = txtEndereco.Text.ToUpper();
            txtBairro.Text = txtBairro.Text.ToUpper();
            txtComplemento.Text = txtComplemento.Text.ToUpper();
            txtMunicipio.Text = txtMunicipio.Text.ToUpper();
            txtUF.Text = txtUF.Text.ToUpper();
            txtNumero.Text = txtNumero.Text.ToUpper();
            txtObs.Text = txtObs.Text.ToUpper();
            txtPontoReferencia.Text = txtPontoReferencia.Text.ToUpper();
        }

        private void frmCliente_Load(object sender, EventArgs e)
        {
            if (tipoOperacao.Equals("n"))
            {
                tipoOperacao = "i";
                carregaGrid();
                LimparCampos();
                //CarregaAutoCompleteEnderecos(); 
            }
        }

        private void carregaGrid()
        {
            //conexao = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + @"\database.accdb");
            conexao = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ Application.StartupPath +@"\database.mdb"); 
            string sql = "";
            sql = sql + "    SELECT        CODIGO AS CÓDIGO, NOME, TELEFONE, TELEFONE2, ENDERECO + ', ' + BAIRRO + ', ' + MUNICIPIO AS ENDEREÇO, EMAIL";
            sql = sql + "    FROM            tblCliente";
            sql = sql + "    WHERE 1=1 ";
            if (!(txtTelefoneBusca.Text.Replace("-", "").Trim().Equals("")))
            {
                sql = sql + "  AND (TELEFONE LIKE '" + txtTelefoneBusca.Text + "%' or TELEFONE2 LIKE '" + txtTelefoneBusca.Text + "%')";
            }
            if (!(txtNomeBusca.Text.Trim().Equals("")))
            {
                sql = sql + "  AND (NOME LIKE '" + txtNomeBusca.Text + "%') ";
            }
            sql = sql + "    ORDER BY NOME";

            adapter = new OleDbDataAdapter(sql, conexao);
            ds = new DataSet();
            adapter.Fill(ds, "tblCliente");
           
            
            dataGridView1.DataSource = ds.Tables["tblCliente"];
          
        }

        private void CarregaAutoCompleteEnderecos()
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            carregaGrid();
        }


        private void preencheCamposClientes(string codigo_cliente)
        {
            conexao = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + @"\database.mdb");
            string sql = "";
            sql = sql + "    SELECT        * ";
            sql = sql + "    FROM            tblCliente";
            sql = sql + "    WHERE CODIGO = "+Convert.ToInt32(codigo_cliente)+"";

            adapter = new OleDbDataAdapter(sql, conexao);
            ds = new DataSet();
            adapter.Fill(ds, "tblCliente");
            this.txtNome.Text = Convert.ToString(ds.Tables["tblCliente"].Rows[0]["nome"]);
            this.txtTelefone.Text = Convert.ToString(ds.Tables["tblCliente"].Rows[0]["telefone"]);
            this.txtEndereco.Text = Convert.ToString(ds.Tables["tblCliente"].Rows[0]["endereco"]);
            this.txtNumero.Text = Convert.ToString(ds.Tables["tblCliente"].Rows[0]["numero"]);
            this.txtComplemento.Text = Convert.ToString(ds.Tables["tblCliente"].Rows[0]["complemento"]);
            this.txtBairro.Text = Convert.ToString(ds.Tables["tblCliente"].Rows[0]["bairro"]);
            this.txtMunicipio.Text = Convert.ToString(ds.Tables["tblCliente"].Rows[0]["municipio"]);
            this.txtUF.Text = Convert.ToString(ds.Tables["tblCliente"].Rows[0]["uf"]);
            this.txtPontoReferencia.Text = Convert.ToString(ds.Tables["tblCliente"].Rows[0]["referencia"]);
            this.txtEmail.Text = Convert.ToString(ds.Tables["tblCliente"].Rows[0]["email"]);
            this.txtObs.Text = Convert.ToString(ds.Tables["tblCliente"].Rows[0]["obs"]);
            this.txtTelefone2.Text = Convert.ToString(ds.Tables["tblCliente"].Rows[0]["telefone2"]);
            lblCadastro.Text = "Última Atualização em: "+ Convert.ToString(ds.Tables["tblCliente"].Rows[0]["Atualizacao"]);
            lblAtualizacao.Text = "Cliente Desde: " + Convert.ToString(ds.Tables["tblCliente"].Rows[0]["cadastro"]);
            tipoOperacao = "a";
            codigo_c = Convert.ToInt32(codigo_cliente);
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            if (CamposPreenchidos())
            {
                if ((numeroCadastrado(txtTelefone.Text)) && (tipoOperacao.Equals("i")))
                {
                    MessageBox.Show("Já existe um cliente cadastrado com este telefone, caso queira adicionar mais pessoas, insira o nome nas observações do cliente", "atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    if (tipoOperacao.Equals("i"))
                    {
                        insereDadosNoBanco();
                    }
                    else
                    {
                        atualizaDadosNoBanco();
                    }
                    if (pdv > 0)
                    {
                        preencheInstanciaFrmVendas();
                        this.Close();
                    }
                    else
                    {
                        carregaGrid();
                    }
                }
            }
        }

        private void preencheInstanciaFrmVendas()
        {
            bool b = instanciaFrmVenda.checaClienteExiste(txtTelefone.Text);

            string nvoCodigo = instanciaFrmVenda.lblCodigoCliente.Text;

            instanciaFrmVenda.lblNomeCliente.Text = txtNome.Text;
            instanciaFrmVenda.lblNomeCliente.Refresh();

            string endereco = txtEndereco.Text;
            endereco = endereco + ", " + txtNumero.Text;
            endereco = endereco + " " + txtComplemento.Text;
            endereco = endereco + ", " + txtBairro.Text;
            endereco = endereco + ", " + txtMunicipio.Text;

            instanciaFrmVenda.txtEndereco.Text = endereco;
            instanciaFrmVenda.txtEndereco.Refresh();

            instanciaFrmVenda.txtReferencia.Text = txtPontoReferencia.Text;
            instanciaFrmVenda.txtReferencia.Refresh();

            instanciaFrmVenda.txtObservacaoCliente.Text = txtObs.Text;
            instanciaFrmVenda.txtObservacaoCliente.Refresh();

            instanciaFrmVenda.txtTelefone.Text = txtTelefone.Text;
            instanciaFrmVenda.txtTelefone.Refresh();

            instanciaFrmVenda.gbxDadosCliente.Visible = true;
            instanciaFrmVenda.gbxDadosCliente.Refresh();

        }

        private bool numeroCadastrado(string oTelefone)
        {
            conexao = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + @"\database.mdb");
            string sql = "";
            sql = sql + "    SELECT        *";
            sql = sql + "    FROM            tblCliente";
            sql = sql + "    WHERE 1=1 ";
            sql = sql + "    AND (TELEFONE LIKE '" + oTelefone + "')";

            comando = new OleDbCommand();
            comando.Connection = conexao;
            comando.CommandText = sql;
            try
            {
                conexao.Open();
                comando.CommandType = CommandType.Text;
                OleDbDataReader reader = comando.ExecuteReader();
                if (reader.HasRows)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro ao fazer a operação! " + ex.Message.ToString());
                return false;
            }
            finally
            {
                conexao.Close();
            }




        }

        private bool CamposPreenchidos()
        {
            if (txtTelefone.Text.Replace("-", "").Trim().Equals(""))
            {
                errorProvider1.SetError(txtTelefone, "O Telefone é de preenchimento obrigatório");
                return false;
            }
            else if (txtNome.Text.Trim().Equals(""))
            {
                errorProvider1.SetError(txtNome, "O Nome é de preenchimento obrigatório");
                return false;
            }
            else if (txtEndereco.Text.Trim().Equals(""))
            {
                errorProvider1.SetError(txtEndereco, "O Endereço é de preenchimento obrigatório");
                return false;
            }
            else if (txtNumero.Text.Trim().Equals(""))
            {
                errorProvider1.SetError(txtNumero, "O Número é de preenchimento obrigatório");
                return false;
            }
            else
            {
                return true;
            }
        }

        private void atualizaDadosNoBanco()
        {
            conexao = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + @"\database.mdb");
            string sql = "";
            sql = sql + "    UPDATE tblCliente  SET ";
            sql = sql + "    NOME='" + txtNome.Text + "', TELEFONE='" + txtTelefone.Text + "', ENDERECO='" + txtEndereco.Text + "', NUMERO='" + txtNumero.Text + "', COMPLEMENTO='" + txtComplemento.Text + "', BAIRRO='" + txtBairro.Text + "', UF='" + txtUF.Text + "', MUNICIPIO='" + txtMunicipio.Text + "', REFERENCIA='" + txtPontoReferencia.Text + "', EMAIL='" + txtEmail.Text + "', OBS='" + txtObs.Text + "', ATUALIZACAO='" + DateTime.Now + "', TELEFONE2 ='" + txtTelefone2.Text + "'";
            sql = sql + "   WHERE CODIGO = " + codigo_c;

            comando = new OleDbCommand();
            comando.Connection = conexao;
            comando.CommandText = sql;
            try
            {
                conexao.Open();
                comando.ExecuteNonQuery();
                ds.AcceptChanges();
                MessageBox.Show("Cliente atualizado com sucesso!");
                tipoOperacao = "a";
                txtNomeBusca.Text = txtNome.Text;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro ao fazer a operação! " + ex.Message.ToString());
            }
            finally
            {
                conexao.Close();
            }
        }

        private void insereDadosNoBanco()
        {
            conexao = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + @"\database.mdb");
            string sql = "";
            sql = sql + "    INSERT INTO tblCliente  ";
            sql = sql + "    (NOME, TELEFONE, ENDERECO, NUMERO, COMPLEMENTO, BAIRRO, UF, MUNICIPIO, REFERENCIA, EMAIL, OBS, CADASTRO, ATUALIZACAO,TELEFONE2)";
            sql = sql + "    VALUES        ('" + txtNome.Text + "', '" + txtTelefone.Text + "', '" + txtEndereco.Text + "', '" + txtNumero.Text + "',";
            sql = sql + "   '" + txtComplemento.Text + "', '" + txtBairro.Text + "', '" + txtUF.Text + "', '" + txtMunicipio.Text + "', '" + txtPontoReferencia.Text + "', '" + txtEmail.Text + "', '" + txtObs.Text + "', '" + DateTime.Now + "', '" + DateTime.Now + "', '"+ txtTelefone2.Text +"')";

            comando = new OleDbCommand();
            comando.Connection = conexao;
            comando.CommandText = sql;
            try
            {
                conexao.Open();
                comando.ExecuteNonQuery();
                //ds.AcceptChanges();
                MessageBox.Show("Cliente cadastrado com sucesso!");
                tipoOperacao = "a";
                txtNomeBusca.Text = txtNome.Text;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro ao fazer a operação! " + ex.Message.ToString());
            }
            finally
            {
                conexao.Close();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            LimparCampos();
        }

        private void LimparCampos()
        {
            this.txtNome.Text = "";
            this.txtTelefone.Text = "";
            this.txtEndereco.Text = "";
            this.txtNumero.Text = "";
            this.txtComplemento.Text = "";
            this.txtBairro.Text = "";
            this.txtMunicipio.Text = "ILHA DO GOVERNADOR";
            this.txtUF.Text = "RJ";
            this.txtPontoReferencia.Text = "";
            this.txtEmail.Text = "";
            this.txtObs.Text = "";
            lblAtualizacao.Text = "";
            lblCadastro.Text = "";
            tipoOperacao = "i";
            txtTelefone2.Text="";
        }


        private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)
        {


        }


        private void dataGridView1_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            //MessageBox.Show("no momento a função de excluir cliente está desabilitada, entre em contato com o desenvolvedor caso queira excluir dados");
            string codigo_cliente = Convert.ToString(e.Row.Cells["CÓDIGO"].Value);
            
            ExcluiCliente(codigo_cliente);
            LimparCampos();
            
        }

        private void ExcluiCliente(string codigo_cliente)
        {
            string sql = " DELETE * FROM tblCliente  WHERE (((tblCliente.CODIGO)="+codigo_cliente+"))";
            if (MessageBox.Show("deseja apagar o Cliente selecionado dos seus dados? Essa operação é irreverssível.", "atenção", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                executaQuery(sql);
            }

        }

        private void executaQuery(string consulta)
        {
            conexao = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + @"\database.mdb");
            string sql = consulta;

            comando = new OleDbCommand();
            comando.Connection = conexao;
            comando.CommandText = sql;
            try
            {
                conexao.Open();
                comando.ExecuteNonQuery();
                ds.AcceptChanges();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro ao fazer a operação! " + ex.Message.ToString());
            }
            finally
            {
                conexao.Close();
            }
        }

        private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                string codigo_cliente = Convert.ToString(dataGridView1.Rows[e.RowIndex].Cells["CÓDIGO"].Value);



                if (!(codigo_cliente.Trim().Equals("")))
                {
                    preencheCamposClientes(codigo_cliente);
                }
            }
            catch (Exception ex)
            {
                ex.Message.ToString();
            }
        }




    }
}
